#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <signal.h>
#include <string.h>

void signal_handler(int signum, siginfo_t *info, void *context) {
    switch (signum) {
        case SIGUSR1:
            printf("Received SIGUSR1 with value %d\n", info->si_value.sival_int);
            break;
        default:
            printf("Received signal %d\n", signum);
            break;
    }
}

int main() {
    struct sigaction sa;
    int fd;

    // 设置信号处理函数
    sa.sa_sigaction = signal_handler;
    sa.sa_flags = SA_SIGINFO;

    // 注册信号处理函数
    sigaction(SIGUSR1, &sa, NULL);

    // 打开字符设备
    fd = open("/dev/sigqueue_dev", O_RDWR);
    if (fd < 0) {
        perror("open /dev/sigqueue_dev failed");
        exit(1);
    }

    // 调用 ioctl 触发信号发送
    if (ioctl(fd, 0, 0) < 0) {
        perror("ioctl failed");
        close(fd);
        exit(1);
    }

    // 无限循环，等待信号
    while (1) {
        pause(); // 等待信号
    }

    close(fd);
    return 0;
}


